require(["config"], function() {
	require(["jquery", "template","cookie","load"], function($,template) {
        function Cart(){
            this.cart = [];
            // 配置 cookie 自动在JS值与JSON值之间转换
			$.cookie.json = true;
            this.render()
            // 注册事件监听
            this.addListener();
			this.calcTotalHandler();
		}
		$.extend(Cart.prototype,{
			// 加载渲染列表商品
			render(){
                // 获取cookie中保存的购物车数据
                const cart = this.cart = $.cookie("cart") || [];
                // 将读取到的购物车数据使用 art-template 渲染
                const html = template("cart-template", {"cart": cart});
               // console.log(cart)
                $(".cart_body").html(html);
                
                 
            },
            
            // 添加事件监听
            addListener(){
                // 删除链接
                $(".cart_body").on("click",".link-del",$.proxy(this.delHandler,this));
                // 数量增加/减少
                $(".cart_body").on("click","#icon_subtract,#icon_add",$.proxy(this.modifyAmountHandler,this))
                // 输入修改数量
                $(".cart_body").on("blur","#number",$.proxy(this.modifyAmountHandler,this))
                
                $(".cart_body").on("click","#number,#icon_subtract,#icon_add,.link-del",(this.calcTotalHandler));
                $(".cart_body").on("blur","#number",(this.calcTotalHandler));
                
            },
            // 删除处理
            delHandler(event){
                // 所在行
                const $tr = $(event.target).parents("tr");
                // 待删除商品的id
                const id = $tr.find(".id").text();
                // 将数组中当前删除的商品对象移除
                this.cart = this.cart.filter(curr=>curr.id!=id);
                // 将修改够的数组存回 cookie
                $.cookie("cart",this.cart,{expires:10,path:"/"});
                $tr.remove();
            },
            // 修改数量处理
            modifyAmountHandler(event){
                //console.log(event.target)
                // 所在行
                const   
                    $src = $(event.target),
                    $tr = $src.parents("tr");
                    
                // 当前修改数量的商品id
                const id = $tr.find(".id").text();
                
                // 对应商品对象
                const prod = this.cart.filter(curr=>curr.id == id)[0];
               // console.log(prod)
                // 修改数量
                if($src.is("#icon_add")) // 加
                    prod.amount++;
                else if($src.is("#icon_subtract")){ // 减
                    if(prod.amount <=1) // 商品数量最小减到1
                     return;
                    prod.amount--;

                }else if($src.is("#number")){ // 输入修改
                    // 获取输入的数量值
                    const _amount = $src.val();
                    // 判断是否符合数字合法格式
                    const reg = /^[1-9]\d*$/;
                    if(!reg.test(_amount)){
                        $src.val(prod.amount);
                        return;
                    }
                    prod.amount = Number(_amount);
                }
                // 保存 cookie
                $.cookie("cart",this.cart,{expires:10,path:"/"});
                // 显示修改后数量
                $tr.find("#number").val(prod.amount);
                // 修改修改后的小计金额
                $tr.find("#subtotal").text((prod.price*prod.amount).toFixed(2));
            },
            // 计算合计金额
            calcTotalHandler(){
                // let sum = 0;
                // $(".cart_body").show((element)=>{
                //     console.log($(element));
                //     sum += Number($(element).parents("tr").find("#subtotal").text())
                // });
                // $(".total").text(sum.toFixed(2));
                var num =0;
                for (let i = 0; i < $(".tr").length; i++){
                   num += Number($(".tr").eq(i).find("#subtotal").text()); 
                }
                $(".total").text(num.toFixed(2));
            }

			
		});
		
		new Cart();
	});

});